import pandas as pd
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
import seaborn as sns

#numpy
iris = datasets.load_iris()
iris_data = np.array(iris.data)

print('-------分别打印鸢尾花150行（样本）前五行的花瓣长度、花瓣宽度、花萼长度、花萼宽度四个特征的数据-------')
iris_data.sort()
print(iris_data[:5])

print('-------打印鸢尾花“花萼长度”前五个的数据-------')
sepal_length = iris_data[:, 3]
print(sepal_length[:5])
print('-------打印鸢尾花“花萼宽度”前五个的数据-------')
sepal_width = iris_data[:, 2]
print(sepal_width[:5])
print('-----------------打印鸢尾花“花萼长度”去重后的结果---------------')
uni_iris = np.unique(sepal_length)
print(uni_iris)
print('-----------------求所有鸢尾花花萼长度数据的最大值---------------')
print(np.max(sepal_length))
print('-----------------求所有鸢尾花花萼长度数据的最小值---------------')
print(np.min(sepal_length))
print('-----------------求所有鸢尾花花萼长度数据的平均值、标准差、方差---------------')
a=np.mean(sepal_length)#平均数
b=np.var(sepal_length)#标准差
c=np.std(sepal_length)#方差
print(a,b,c)

print('-------打印鸢尾花“花瓣长度”前五个的数据-------')
petal_length = iris_data[:, 1]
print(petal_length[:5])
print('-------打印鸢尾花“花瓣宽度”前五个的数据-------')
petal_width = iris_data[:, 0]
print(petal_width[:5])
print('-----------------打印鸢尾花“花瓣长度”去重后的结果---------------')
uni_iris = np.unique(petal_length)
print(uni_iris)
print('-----------------求所有鸢尾花花瓣长度数据的最大值---------------')
print(np.max(petal_length))
print('-----------------求所有鸢尾花花瓣长度数据的最小值---------------')
print(np.min(petal_length))
print('-----------------求所有鸢尾花花萼长度数据的平均值、标准差、方差---------------')
d=np.mean(petal_length)#平均数
e=np.var(petal_length)#标准差
f=np.std(petal_length)#方差
print(d,e,f)

print('-----------------求鸢尾花线性回归r值---------------')
#回归曲线
x = iris_data[:, 3]
y = iris_data[:, 2]
plt.plot(x, y, '*')
def B1(x, y):
    x1 = x.size * np.sum(x * y)
    x2 = np.sum(x) * np.sum(y)
    x3 = x.size * np.sum(x * x)
    x4 = np.square(np.sum(x))
    return (x1 - x2) / (x3 - x4)
y_pre = np.zeros(x.size)
def predict(x):
    for i in np.arange(x.size):
        pre = b0 + b1 * x[i]
        y_pre[i] = pre
b1 = B1(x, y)
b0 = np.mean(y) - b1 * np.mean(x)
predict(x)
y_mean = np.mean(y)
R = 1 - (np.sum(np.square(y - y_pre))) / (np.sum(np.square(y - y_mean)))
print(R)
plt.plot(x, y, '*')
plt.plot(x, y_pre, 'r--')
plt.show()

#matplot
a = np.array(sepal_length)
b = np.array(sepal_width)
plt.scatter(a, b,s=40,c='red',alpha=0.5,cmap='viridis')#s点的大小，
plt.colorbar()  # 显示颜色条
plt.show()

c = np.array(petal_length)
d = np.array(petal_width)
plt.scatter(c, d,s=40,c='red',alpha=0.5,cmap='viridis')#s点的大小，
plt.colorbar()  # 显示颜色条
plt.show()




